﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Windows.Forms.VisualStyles;

namespace WenSkin.Controls.ListBoxControl
{
    [ToolboxItem(false)]
    public class WenListBoxControlItemTemplate : WenControl
    {
        public WenListBoxControlItemTemplate() : base()
        {
            Size = new Size(100, 30);
            this.AddControlButton();
            this.AddControlRemoveButton();
        }

        private Color backColor = Color.Transparent;
        private WenButton removeButton;
        private WenButton button;

        #region 公有属性

        /// <summary>
        /// 是否显示删除按钮，仅对非模板生效
        /// </summary>
        [Category("Wen"), Description("是否显示删除按钮"), DefaultValue(true)]
        public bool RemoveButtonShow
        {
            get => removeButton != null && removeButton.Visible;
            set { if (removeButton != null) removeButton.Visible = value; }
        }
        /// <summary>
        /// 是否显示自定义按钮
        /// </summary>
        [Category("Wen"), Description("是否显示自定义按钮"), DefaultValue(true)]
        public bool ButtonShow
        {
            get => button != null && button.Visible;
            set { if (button != null) button.Visible = value; }
        }
        /// <summary>
        /// 按钮图标
        /// </summary>
        [Category("Wen"), Description("按钮图标"), DefaultValue(true)]
        public Image ButtonImage
        {
            get => button?.Image;
            set { if (button != null) button.Image = value; }
        }
        #endregion

        #region 委托

        public event EventClass.ObjectEventHandler RemoveClick;
        public event EventClass.ObjectEventHandler ButtonClick;

        public void OnRemoveClick()
        {
            RemoveClick?.Invoke(this, new EventClass.ObjectEventArgs() { Value = this });
        }
        public virtual void OnButtonClick()
        {
            ButtonClick?.Invoke(this, new EventClass.ObjectEventArgs() { Value = this });
        }

        #endregion

        private void AddControlRemoveButton()
        {
            removeButton = new WenButton
            {
                Image = Properties.Resources.remove,
                ImageSize = new Size(16, 16),
                Dock = DockStyle.Right,
                Width = 30,
                TextImageRelation = TextImageRelation.Overlay
            };
            removeButton.MouseEnter += (s, e) =>
            {
                backColor = this.BackColor;
                this.BackColor = Color.FromArgb(73, 73, 75);
            };
            removeButton.MouseLeave += (s, e) =>
            {
                this.BackColor = backColor;
            };
            removeButton.Click += (s, e) =>
            {
                OnRemoveClick();
            };
            this.Controls.Add(removeButton);
        }
        private void AddControlButton()
        {
            button = new WenButton
            {
                Image = null,
                ImageSize = new Size(16, 16),
                Dock = DockStyle.Right,
                Width = 30,
                TextImageRelation = TextImageRelation.Overlay
            };
            button.MouseEnter += (s, e) =>
            {
                backColor = this.BackColor;
                this.BackColor = Color.FromArgb(73, 73, 75);
            };
            button.MouseLeave += (s, e) =>
            {
                this.BackColor = backColor;
            };
            button.Click += (s, e) =>
            {
                OnButtonClick();
            };
            this.Controls.Add(button);
        }

        protected override void WenOnPaint(Graphics g, Rectangle rec, PaintEventArgs e)
        {
            base.WenOnPaint(g, rec, e);
            g.DrawString(this.Text, this.Font, new SolidBrush(this.ForeColor), rec, ControlHelper.StringConters);
        }

        #region 重写

        protected override void OnMouseLeave(EventArgs e)
        {
            base.OnMouseLeave(e);
            this.BackColor = this.backColor;
        }

        protected override void OnMouseEnter(EventArgs e)
        {
            base.OnMouseEnter(e);
            this.backColor = this.BackColor;
            this.BackColor = Color.FromArgb(63, 63, 65);
        }
        #endregion
    }
}